package com.flong.spring.config;

import com.flong.spring.bean.Car;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @Author:liangjl
 * @Date: 2020/6/10-21:36
 * @Eamil:jilongliang@sina.com
 * @Description: --------------------------------------------------
 * Bean的生命周期
 * bean创建-->
 *
 * 初始化-->
 *
 * 销毁的过程
 *  单实例：容器关闭的时候
 *  多实例：容器不会管理这个Bean，容器不会销毁方法
 *
 * 容器管理Bean的生命周期，我们可以自定义初始化和销毁，容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁
 * 1、指定初始化和销毁方法，通过Bean指定init方法destroy方法
 * 2、通过让bean实现InitializingBean(定义初始化逻辑)DisposableBean
 * 3、通过JSR250
 *  @see javax.annotation.PostConstruct 在bean创建完成并且属性赋值完成，来执行初始化方法
 *  @see javax.annotation.PreDestroy 在容器销毁bean之前通知我们进行清理操作
 * 4、BeanPostProcessor Bean的后置处理器
 *    在bean初始化前后进行一些处理工作
 *    @see BeanPostProcessor#postProcessBeforeInitialization  在初始化之前工作
 *    @see BeanPostProcessor#postProcessAfterInitialization   在初始化之后工作
 *
 */
@Configuration
@ComponentScan("com.flong.spring")
public class BeanLifeCycle {

    @Bean(initMethod = "init",destroyMethod = "destroy")
    public Car car() {
        return new Car();
    }
}
